/**
 * gislin 2017年9月20日
 */
package com.btcode.orm.relation.ex;

import com.btcode.orm.model.IField;

/**
 * @author gislin 2017年9月20日
 */
public interface IRelation {

    /**
     * @param masterAField 主表用来关联的字段，一般是主键，也有例外，比如字典
     * @param slaveAField 从表里和主表关联的外键
     * @param isRelationDelate 是否级联删除，如果为true，在删除主表记录的时候，会对应删除从表里关联的记录，此设置在调用了manyToMany方法后，将强制为true
     * @param isNeedCache 是否缓存
     */
    void oneToMany(IField masterAField, IField slaveAField, boolean isRelationDelate,
        boolean isNeedCache);

    IRelation manyToMany(IField masterBField, IField slaveBField);

    boolean isPrimaryRelationCache();

    boolean isManyToMany();

    /**
     * 此方法只有在一对多时才有意义
     */
    boolean isRelationDelete();

    IField getMasterField();

    IField getSlaveField();

    IField getM2mMasterField();

    IField getM2mSlaveField();

}
